/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package fr.ove.openmath.jome.formaters.om;

/**
 *
 * @author Mr.Sam
 */
import fr.ove.utils.*;
import fr.ove.openmath.jome.model.*;
import fr.ove.openmath.jome.formaters.om.*;

/**
* Formats the formula tree structure as its corresponding OpenMath object.<BR>
* Format the function element.
*
* @author © 2000 DIRAT Laurent
* @version 1.0 07/01/2000
*/
public class Mfd2SubstitutionFormater implements Formater {
    /**
    * Returns the specified object formatted as a string.
    * @param formatedObject the formatted object (for structured object, could represents the beginning).
    * @param formaterRepository where the different other formaters are.
    * @param obj the object to format.
    */
    public String format(String formatedObject, FormaterRepository formaterRepository, Object obj) {
        OpenMathFormater omFormater = (OpenMathFormater) formaterRepository;
        Mfd2Substitution fts = (Mfd2Substitution) obj;
        
        formatedObject += omFormater.writeStartApplication();
        
        // Attention, fts.getOperatorName() retourne le nom de la fonction, mais "(" y est collée.
        // Il faut donc la supprimer.
        // A voir si modif sur le modèle !!!
        String objectId = fts.getTheOperator();
        objectId = objectId.substring(0, objectId.length()-1);
        formatedObject += omFormater.writeSymbol(objectId);
            
        Formater formater = null;
        FormulaTreeStructure ftsChild = null;
        FormulaTreeStructure child = null;
        int nbChildren = fts.getNbChildren();
        for (int i = 0; i < nbChildren; i++) {
            ftsChild = (FormulaTreeStructure) fts.getChild(i); // on est sur le slot
            ftsChild = (FormulaTreeStructure) ftsChild.getChild(0); // on est sur le Mfd2SubstitutionElement
            child = (FormulaTreeStructure) ftsChild.getChild(0); // l'élément substitué
            objectId = child.getResourceIdentifier();
            formater = formaterRepository.getFormater(objectId);
            formatedObject = formater.format(formatedObject, formaterRepository, child);
            child = (FormulaTreeStructure) ftsChild.getChild(1); // la substitution
            objectId = child.getResourceIdentifier();
            formater = formaterRepository.getFormater(objectId);
            formatedObject = formater.format(formatedObject, formaterRepository, child);
        }
        
        formatedObject += omFormater.writeEndApplication();
        
        return formatedObject;
    }
}